package com.nuanshui.heatedloan.userinfo.facade;

import com.nuanshui.framework.exception.BizException;
import com.nuanshui.heatedloan.userinfo.form.BoundUserForm;
import com.nuanshui.heatedloan.userinfo.model.User;
import com.nuanshui.heatedloan.userinfo.model.UserInfo;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;

import javax.validation.constraints.NotNull;
import java.util.Collection;
import java.util.List;


/**
 * 操作用户的逻辑类
 * @ClassName: UserService 
 * @author guohao
 * @date 2015年4月17日 下午4:00:58 
 *
 */
public interface UserService {

	/**
	 * 插入
	 * @param record
	 * @return
	 */
    int insert(User record);
	/**
	 * 根据主键删除用户
	 * @param id
	 * @return
	 */
    int delete(String id);

	/**
	 * 手机号码注册，若已存在，直接返回该对象
	 * 
	 * @param phone
	 */
	User register(@NotNull String phone, String password);
	/**
	 * 添加一个用户用于后台管理
	 * @param phone
	 * @param password
	 * @param nick
	 * @return
	 */
    boolean add(String phone, String password, String nick);

	/**
	 * 更改密码
	 * @param oldPwd
	 *            can be null
	 * @param newPwd
	 *            not null
	 * @return changed?
	 */
	boolean changePwd(String oldPwd, String newPwd,String userId);

	/**
	 * 直接更改新密码
	 * @param userId
	 * @param newPwd
	 * @return
	 */
	boolean changePwd(String userId, String newPwd);

	/**
	 * @return 当前用户是否已设置密码
	 */
	boolean isPwdSet();

	/**
	 * 更新用户姓名，身份证号码
	 * 
	 * @param user
	 * @return
	 */
	boolean updateUserInfo(User user,boolean checkNick);

	/**
	 * 用户是否已注册
	 */
	boolean isRegistered(String loginname);

    /**
     * 清空用户密码
     * @param mobile
     * @param code
     * @return
     */
	boolean emptyUserPassword(String mobile, String code);

	/**
	 * 绑定用户账号
	 * @param 
	 * @author guohao
	 * @date 2015年5月6日 下午1:31:27
	 */
    User bindUser(BoundUserForm boundUserForm) throws BizException;
    
    /**
     *注册绑定用户
     * @param boundUserForm
     * @return
     */
    User registerBindUser(BoundUserForm boundUserForm) throws BizException;

    /**
     * 解除账号绑定
     * @param 
     * @author guohao
     * @date 2015年5月7日 下午1:42:30
     */
    void unBindUser(String userId, Integer type);

	/**
	 * 搜索用户
	 * @param keyword
	 * @return
	 */
    List<UserInfo> searchUserKeywordAdept(String keyword, Pageable pageable);
	
	/**
	 * 获取热门搜索用户
	 * @return
	 */
    List<UserInfo> findHostSearchUsers(Pageable pager);


     /**
      * 获取用户手机号
      * @param userId
      * @return
      */
     String getUserPhone(String userId);

	 /**
	  * 获取搜索的用户
	  * @return
	  */
     List<UserInfo> findSearchUsers(@Param("userIds") Collection<String> userIds);
	/**
	 * 保存用户个人信息二维码
	 * @param userId
	 */
    void saveUserQrcode(String userId);
	/**
	 * @param userId
	 */
    String loadQrcodeByUserId(String userId);
	/**
	 * 手机号登录(微信)
	 * @param phone
	 * @param pwd
	 * @return
	* @Author: Sven
	 */
    User loginByPhone(String phone, String pwd);

	List<User> findAllUser(Pageable pager);

	long findAllUserCount();
	
	List<String> getUserIds(String nick);

}